cssselector: Redo change verification
authorBenjamin Otte <otte@redhat.com>
Tue, 9 Dec 2014 02:21:13 +0000 (03:21 +0100)
committerBenjamin Otte <otte@redhat.com>
Wed, 10 Dec 2014 02:49:40 +0000 (03:49 +0100)
Instead of walking the selector tree, we walk the selectors.

gtk/gtkcssprovider.c
gtk/gtkcssselector.c
gtk/gtkcssselectorprivate.h

index daadf04b740ebd50944541df40047b541592aa7e..6b02befcd40fe1630998e2c8678677d0be8d36e9 100644 (file)
@@ -1646,7 +1646,7 @@ verify_tree_get_change_results (GtkCssProvider *provider,
 
        ruleset = tree_rules->pdata[i];
 
-       verify_change |= _gtk_css_selector_tree_match_get_change (ruleset->selector_match);
+       verify_change |= _gtk_css_selector_get_change (ruleset->selector);
       }
 
     if (change != verify_change)
index 9d629ddcb5ba4189e96c57c66c1aac4b06bb2105..fb2b7c29f48c77d7777a8a64109d336dd068595d 100644 (file)
@@ -1744,23 +1744,6 @@ _gtk_css_selector_to_string (const GtkCssSelector *selector)
   return g_string_free (string, FALSE);
 }
 
-
-GtkCssChange
-_gtk_css_selector_tree_match_get_change (const GtkCssSelectorTree *tree)
-{
-  GtkCssChange change = 0;
-
-  update_type_references ();
-
-  while (tree)
-    {
-      change = tree->selector.class->get_change (&tree->selector, change);
-      tree = gtk_css_selector_tree_get_parent (tree);
-    }
-
-  return change;
-}
-
 static gboolean
 gtk_css_selector_foreach_match (const GtkCssSelector *selector,
                                 const GtkCssMatcher  *matcher,
@@ -1843,6 +1826,14 @@ _gtk_css_selector_compare (const GtkCssSelector *a,
   return a_elements - b_elements;
 }
 
+GtkCssChange
+_gtk_css_selector_get_change (const GtkCssSelector *selector)
+{
+  if (selector == NULL)
+    return 0;
+
+  return selector->class->get_change (selector, _gtk_css_selector_get_change (gtk_css_selector_previous (selector)));
+}
 
 /******************** SelectorTree handling *****************/
 
index af95b54d6e3fdd38823e3de4d6374dff22c92f4b..e23ae09cc41b1d1575545e9274efca3081acd83c 100644 (file)
@@ -36,6 +36,7 @@ void              _gtk_css_selector_print           (const GtkCssSelector   *sel
 
 gboolean          _gtk_css_selector_matches         (const GtkCssSelector   *selector,
                                                      const GtkCssMatcher    *matcher);
+GtkCssChange      _gtk_css_selector_get_change      (const GtkCssSelector   *selector);
 int               _gtk_css_selector_compare         (const GtkCssSelector   *a,
                                                      const GtkCssSelector   *b);
 
@@ -46,7 +47,6 @@ GtkCssChange _gtk_css_selector_tree_get_change_all   (const GtkCssSelectorTree *
                                                      const GtkCssMatcher *matcher);
 void         _gtk_css_selector_tree_match_print      (const GtkCssSelectorTree *tree,
                                                      GString                  *str);
-GtkCssChange _gtk_css_selector_tree_match_get_change (const GtkCssSelectorTree *tree);
 
 
 GtkCssSelectorTreeBuilder *_gtk_css_selector_tree_builder_new   (void);